/*
 * DirectorioImpl.h
 *
 *  Created on: Feb 13, 2010
 *      Author: jgrande
 */

#ifndef DIRECTORIOIMPL_H_
#define DIRECTORIOIMPL_H_

#include "Directorio.h"

#include "../Common/Mensajes/MensajeAplicacion.h"

#include "../../Framework/Common/TemplateSingleton.h"

#include "../../Middleware/Common/Config.h"

#include "../../Middleware/Comunicaciones/MiddlewareCliente.h"

namespace aplicacion {

class DirectorioImpl : public Directorio, public Singleton {

	CLIENT* client;

	DirectorioImpl(const DirectorioImpl&);
	DirectorioImpl& operator=(const DirectorioImpl&);

	virtual void convertir(ArrayUniversoRPC* arr, t_listaUniversos& lista);

public:

	DirectorioImpl();
	virtual ~DirectorioImpl();

	virtual bool registrarNuevo (InformacionCreacionUniverso& aRegistrar);

	virtual bool registrarNuevo (JuegoDTO& aRegistrar);

	virtual bool add(const InformacionCreacionUniverso& universo, InformacionPlaneta& aAgregar);

	virtual bool add(const JuegoDTO& juego, JugadorDTO& aAgregar);

	virtual bool remove(const JugadorDTO& aQuitar);

	virtual bool esperarComienzo(const JugadorDTO& jugador);

	virtual t_listaUniversos listarUniversosAbiertos();

	virtual t_listaUniversos listarUniversosCerrados();

	virtual t_listaJuegos listarJuegosAbiertos();

	virtual bool destruirJuego(const JuegoDTO& juego);

	virtual InformacionPlaneta* getInformacionPlaneta(InformacionPlaneta* idPlaneta);

	virtual Direccion getDireccionPlaneta(IdPlaneta idPlaneta);

	virtual t_listaPlanetas listarPlanetas(IdUniverso idUniverso);

	virtual operator bool() const { return client!=NULL; }

};

typedef SingletonTemplate<DirectorioImpl> DirectorioSingleton;

}

#endif /* DIRECTORIOIMPL_H_ */
